package hr.ctg.domain.model;

// Generated 2007.05.02 22:50:59 by Hibernate Tools 3.2.0.b9

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.validator.NotNull;
import org.jboss.seam.annotations.Name;

/**
 * Slika generated by hbm2java
 */
@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name = "slika")
@NamedQueries( {
		@NamedQuery(name = "Slika.findByKOP", query = "select s from Slika s where s.korisnik = ? and s.objekt = ? and s.pocetna = true"),
		@NamedQuery(name = "Slika.findByKO", query = "select s from Slika s where s.korisnik = ? and s.objekt = ?"),
		@NamedQuery(name = "Slika.findByIdObjektaP", query = "select s from Slika s where s.objekt.idObjekta = ? and s.pocetna = true"),
		@NamedQuery(name = "Slika.findByIdParkaP", query = "select s from Slika s where s.park.idParka = ? and s.pocetna = true"),
		@NamedQuery(name = "Slika.findByIdOtokaP", query = "select s from Slika s where s.otok.idOtoka = ? and s.pocetna = true"),
		@NamedQuery(name = "Slika.findByIdMjestaP", query = "select s from Slika s where s.mjesto.idMjesta = ? and s.pocetna = true"),
		@NamedQuery(name = "Slika.findByIdDogadjajaP", query = "select s from Slika s where s.dogadjaj.idDogadjaja = ? and s.pocetna = true"),
		@NamedQuery(name = "Slika.findByO", query = "select s from Slika s where s.objekt = ?"),
		@NamedQuery(name = "Slika.findByIdObjekta", query = "select s from Slika s where s.objekt.idObjekta = ?"),
		@NamedQuery(name = "Slika.findCountByIdObjekta", query = "select count(s.id) from Slika s where s.objekt.idObjekta = ?"),
		@NamedQuery(name = "Slika.findByIdMjesta", query = "select s from Slika s where s.mjesto.idMjesta = ?"),
		@NamedQuery(name = "Slika.findByIdParka", query = "select s from Slika s where s.park.idParka = ?"),
		@NamedQuery(name = "Slika.findCountByIdMjesta", query = "select count(s.id) from Slika s where s.mjesto.idMjesta = ?"),
		@NamedQuery(name = "Slika.findByIdOtoka", query = "select s from Slika s where s.otok.idOtoka = ?"),
		@NamedQuery(name = "Slika.findCountByIdOtoka", query = "select count(s.id) from Slika s where s.otok.idOtoka = ?"),
		@NamedQuery(name = "Slika.findByIdDogadjaja", query = "select s from Slika s where s.dogadjaj.idDogadjaja = ?") })
@Name("slika")
public class Slika implements java.io.Serializable {

	public static final String NO_IMAGE_PATH = "/resources/images/no_image.png";

	/**
	 * 
	 */
	private static final long serialVersionUID = 4994976331673441822L;
	private int idSlike;
	private Objekt objekt;
	private Mjesto mjesto;
	private Otok otok;
	private Park park;
	private Dogadjaj dogadjaj;

	private Korisnik korisnik;
	private byte[] sadrzaj;
	private String opis;
	private String tipSadrzaja;
	private boolean pocetna;

	public Slika() {
	}

	public Slika(final int idSlike) {
		this.idSlike = idSlike;
	}

	public Slika(final int idSlike, final Objekt objekt,
			final Korisnik korisnik, final byte[] sadrzaj,
			final String tipSadrzaja, final boolean pocetna) {
		this.idSlike = idSlike;
		this.objekt = objekt;
		this.korisnik = korisnik;
		this.sadrzaj = sadrzaj;
		this.tipSadrzaja = tipSadrzaja;
		this.pocetna = pocetna;
	}

	public Slika(final int idSlike, final Objekt objekt,
			final Korisnik korisnik, final byte[] sadrzaj,
			final String tipSadrzaja, final boolean pocetna, final String opis) {
		this.idSlike = idSlike;
		this.objekt = objekt;
		this.korisnik = korisnik;
		this.sadrzaj = sadrzaj;
		this.tipSadrzaja = tipSadrzaja;
		this.pocetna = pocetna;
		this.opis = opis;
	}

	@PrePersist
	public void prePersist() {
		// System.out.println("slika se sprema");
	}

	@PreUpdate
	public void preUpdate() {
		// System.out.println("slika se sprema");
	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id_slike", unique = true, nullable = false)
	@NotNull
	public int getIdSlike() {
		return idSlike;
	}

	public void setIdSlike(final int idSlike) {
		this.idSlike = idSlike;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_objekta", nullable = true)
	public Objekt getObjekt() {
		return objekt;
	}

	public void setObjekt(final Objekt objekt) {
		this.objekt = objekt;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_korisnika", nullable = false)
	@NotNull
	public Korisnik getKorisnik() {
		return korisnik;
	}

	public void setKorisnik(final Korisnik autor) {
		this.korisnik = autor;
	}

	// @Column(name = "sadrzaj", nullable = false)
	// @NotNull
	@Transient
	public byte[] getSadrzaj() {
		return sadrzaj;
	}

	public void setSadrzaj(final byte[] sadrzaj) {
		this.sadrzaj = sadrzaj;
	}

	@Column(name = "opis")
	public String getOpis() {
		return opis;
	}

	public void setOpis(final String opis) {
		this.opis = opis;
	}

	@Column(name = "tip_sadrzaja")
	public String getTipSadrzaja() {
		return tipSadrzaja;
	}

	@Transient
	public String getImeSlike(String size) {
		return idSlike + size + "."
				+ tipSadrzaja.substring(6, tipSadrzaja.length());
	}

	public void setTipSadrzaja(final String tipSadrzaja) {
		this.tipSadrzaja = tipSadrzaja;
	}

	public boolean isPocetna() {
		return pocetna;
	}

	public void setPocetna(final boolean pocetna) {
		this.pocetna = pocetna;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_mjesta", nullable = true)
	public Mjesto getMjesto() {
		return mjesto;
	}

	public void setMjesto(final Mjesto mjesto) {
		this.mjesto = mjesto;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_otoka", nullable = true)
	public Otok getOtok() {
		return otok;
	}

	public void setOtok(final Otok otok) {
		this.otok = otok;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_parka", nullable = true)
	public Park getPark() {
		return park;
	}

	public void setPark(final Park park) {
		this.park = park;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_dogadjaja", nullable = true)
	public Dogadjaj getDogadjaj() {
		return dogadjaj;
	}

	public void setDogadjaj(final Dogadjaj dogadjaj) {
		this.dogadjaj = dogadjaj;
	}
}
